package com.deer.wms.ware.task.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deer.wms.project.root.core.service.QueryCriteria;
import com.deer.wms.project.root.mapper.SuperMapper;
import com.deer.wms.ware.task.model.SO.*;
import com.deer.wms.ware.task.model.SO.vo.SoMasterVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;

import java.util.List;
import java.util.Map;

/**
 * @author guo
 */
public interface SoMasterMapper extends SuperMapper<SoMaster> {

    List<SoMaster> findCanTongBu();

    List<SoMasterDto> findByWaveId(@Param("waveMasterId") Integer id, @Param("wareId") Integer wareId);

    List<SoMasterDto> findList(SoMasterCriteria criteria);

    List<SoMasterDto> getSeedingByItemCode(@Param("itemCode") String itemCode, @Param("wareId") Integer wareId, @Param("waveMasterId") Integer waveMasterId);

    void deleteByBillNo(@Param("billNo") String billNo);

    List<SoMaster> findSoGroupInfo(SoMasterCriteria criteria);

    /**
     * 根据波次策略查询满足条件的SO单
     * @param criteria SO查询条件
     * @return List<SoMaster>
     */
    List<SoMaster> findSoByWave(SoMasterCriteria criteria);

    List<SoMasterDto> findThatNoCarrier(SoMasterCriteria criteria);

    List<PdaSearchSoData> pdaSearchSo(@Param("trackCode") String trackCode);

    /**
     * 按照波次ID和SO的状态查询满足条件的SO数量
     * @param waveMasterId 波次ID
     * @param state SO状态
     * @return Integer
     */
    Integer findCountByWaveIdAndState(@Param("waveMasterId") Integer waveMasterId,@Param("state")Integer state);

    SoMasterYdyp getYdyp(@Param("itemCode") String itemCode, @Param("wareId") Integer wareId, @Param("waveId") Integer waveId);

    SoMasterYdyp getYdyp2(@Param("billNo") String billNo, @Param("wareId") Integer wareId, @Param("waveId") Integer waveId);

    Integer getMaxPriority();

    int updatePriority(@Param("soMasterId") Integer soMasterId, @Param("priority") Integer priority);

    List<SoMasterDto> findList2(SoMasterCriteria criteria);

    List<SoMasterDto> findList3(SoMasterCriteria criteria);

    List<SoMasterVo> alignList( QueryCriteria criteria);

    Map<String, Object> findByDetilId(Integer soDetailId);
}
